// import 'dart:io';
// import 'dart:math';
//
// import 'package:dio/dio.dart';
// import 'package:extended_image/extended_image.dart';
// import 'package:flutter/foundation.dart';
// import 'package:flutter_image_compress/flutter_image_compress.dart';
// import 'package:flutter_base/config/app_config.dart';
// import 'package:flutter_base/http/http_export.dart';
// import 'package:flutter_base/utils/log/utils_log.dart';
// import 'package:path/path.dart';
// import 'package:path_provider/path_provider.dart';
// import 'package:wechat_camera_picker/wechat_camera_picker.dart';
//
// class ImageUploadUtils {
//   bool useQiNiu = true;
//
//   Future uploadImages({
//     required List<AssetEntity> list,
//     required String prefix,
//     Function(double progress)? progress,
//     Function(dynamic error)? failure,
//     Function(List<String> keys)? success,
//   }) async {
//     double ratio = (1.0 / list.length);
//     int finishCount = 0;
//     List<String> keys = [];
//     for (var entity in list) {
//       try {
//         File? file = await entity.file;
//         var result = await uploadImage(
//           file: file,
//           prefix: prefix,
//           progress: (value) {
//             progress?.call(ratio * (finishCount + value));
//           },
//         );
//         keys.add(result);
//         finishCount += 1;
//       } catch (e) {
//         failure?.call(e.toString());
//         return [];
//       }
//     }
//     success?.call(keys);
//     return keys;
//   }
//
//   Future uploadImagesByFiles({
//     required List<File> files,
//     required String prefix,
//     Function(double progress)? progress,
//     Function(dynamic error)? failure,
//     Function(List<String> keys)? success,
//   }) async {
//     double ratio = (1.0 / files.length);
//     int finishCount = 0;
//     List<String> keys = [];
//     for (var file in files) {
//       try {
//         var result = await uploadImage(
//           file: file,
//           prefix: prefix,
//           progress: (value) {
//             progress?.call(ratio * (finishCount + value));
//           },
//         );
//         keys.add(result);
//         finishCount += 1;
//       } catch (e) {
//         failure?.call(e.toString());
//         return [];
//       }
//     }
//     success?.call(keys);
//     return keys;
//   }
//
//   Future uploadImage({
//     required File? file,
//     required String prefix,
//     Function(String key)? success,
//     Function(dynamic error)? failure,
//     Function(double)? progress,
//   }) async {
//     if (file == null) {
//       failure?.call("upload fail");
//       return Future.error("upload fail");
//     }
//     final random = Random().nextInt(100000);
//     final time = DateTime.now().millisecondsSinceEpoch;
//     String key = "$prefix/$time$random${extension(file.path)}";
//
//     final dataList = await convertImageFileToPng(file);
//     if (dataList == null) {
//       failure?.call("upload fail");
//       return Future.error("upload fail");
//     }
//     try {
//       if (useQiNiu) {
//         return _uploadWithQiNiu(key, dataList, success, failure, progress);
//       } else {
//         return _uploadWithPreSign(dataList, key, success, failure, progress);
//       }
//     } catch (e) {
//       return e;
//     }
//   }
//
//
//   Future<Uint8List?> convertImageFileToPng(File imageFile) async {
//     try {
//       // 从文件读取图像的字节数组
//       Uint8List imageBytes = await imageFile.readAsBytes();
//       return await compressImage(imageBytes);
//     } catch (e) {
//       clog('Error converting image to PNG format: $e');
//       return null;
//     }
//   }
//
//   Future<Uint8List> compressImage(Uint8List imageBytes, {bool firstCompress = true}) async {
//     int compress = 100;
//     bool recursion = false;
//     //图片大于6M时，循环压缩到6M以下
//     if (imageBytes.length > 1024 * 1024 * 6) {
//       compress = 50;
//       recursion = true;
//     } else if (imageBytes.length > 1024 * 1024 * 2 && firstCompress) {
//       compress = 80;
//     }
//     Uint8List compressedData = (firstCompress || compress < 100)
//         ? await FlutterImageCompress.compressWithList(
//       imageBytes,
//       quality: compress,
//       format: CompressFormat.jpeg,
//     )
//         : imageBytes;
//     return recursion ? await compressImage(compressedData, firstCompress: false) : compressedData;
//   }
//
//   Future<bool> storeImageFileToLocalCache(String? imgUrl, File? file) async {
//     if (imgUrl == null || file == null) {
//       return false;
//     }
//     if (imgUrl.contains("?") == true) {
//       imgUrl = imgUrl.split("?").first;
//     }
//     String cacheKey = keyToMd5(imgUrl);
//     try {
//       var cacheImagesDirectory = Directory(join((await getTemporaryDirectory()).path, cacheImageFolderName));
//       if (!cacheImagesDirectory.existsSync()) {
//         cacheImagesDirectory.create(recursive: true);
//       }
//       String path = join(cacheImagesDirectory.path, cacheKey);
//       clog("===>local path $path");
//       await file.copy(path);
//       return true;
//     } catch (e) {
//       return false;
//     }
//   }
// }